package com.geek.javase.wcy03.relation.Game;

import java.util.Arrays;

/**
 * @author wangchaoyang
 * @desc TODO
 * @date 2025/9/3
 */
public class Hero extends Role{

    //一对多关联英雄  数组默认下标从0开始
    private Equip[] equips = new Equip[3];
    //英雄的计数器
    private int index = 0;

    /**
     * 游戏角色拥有基本攻击方法（拥有一定几率打出暴击）
     * @param m  怪兽
     */
    @Override
    public void attack(Role m){
        //产生1-10的随机数，一旦大于6，产生三倍的暴击
        int random = (int)(Math.random()*10+1);
        int block = 0;
        if(random>6){
            block = random*3;
        }

        //攻击方法
        //计算本回合的怪兽失血量 = 英雄的攻击力 + 暴击率 - 怪兽的防御力
        int blood = this.getPower() + block - m.getDefence();
        if(blood>0){
            //计算怪兽的失血量
            m.setBlood(m.getBlood() - blood);
            System.out.println("本回合怪兽失血量为："+blood +" , 剩余血量："+m.getBlood());
        }else{
            System.out.println("本回合攻击无效");
        }
    }

    /**
     * 添加装备的方法
     * @param e  装备的对象
     */
    public void addEquip(Equip e){
        if(index>=equips.length){
            System.out.println("装备已满");
            return;
        }

        //添加装备
        equips[index++] = e;
        //合并攻击力
        this.setPower(this.getPower() + e.getPower());
        //合并防御力
        this.setDefence(this.getDefence() + e.getDefence());
    }

    /**
     * 获取角色信息的方法
     */
    @Override
    public void show(){
        System.out.println("英雄名称："+this.getName());
        System.out.println("英雄等级："+this.getLevel());
        System.out.println("英雄血量："+getBlood());
        System.out.println("英雄种类："+this.getKind());
        System.out.println("英雄攻击力："+this.getPower());
        System.out.println("英雄防御力："+this.getDefence());
        System.out.println("========= 装备信息 =========");
        for (int i = 0; i < index; i++) {
            System.out.println("========= 第"+(i+1)+"装备 =========");
            equips[i].show();
        }
    }

    public Hero() {
    }

    public Hero(String name, int level, int blood, String kind, int power, int defence) {
        super(name, level, blood, kind, power, defence);
    }

    public Hero(String name, int level, int blood, String kind, int power, int defence, Equip[] equips, int index) {
        super(name, level, blood, kind, power, defence);
        this.equips = equips;
        this.index = index;
    }

    //重写toString()  alt+insert
    @Override
    public String toString() {
        return "Hero{" +
                "equips=" + Arrays.toString(equips) +
                ", index=" + index +
                "} " + super.toString();
    }
}
